package in.lib.holder;
import in.lib.adapter.DraftAdapter;
import in.lib.annotation.InjectView;
import in.lib.holder.base.ViewHolder;
import in.lib.manager.SettingsManager;
import in.lib.utils.Views;
import in.lib.view.AvatarView;
import in.lib.view.LinkifiedTextView;
import in.model.DraftPost;
import in.model.User;
import in.obj.entity.Entity.Type;
import in.obj.entity.LinkEntity;
import in.rob.client.MainApplication;
import in.rob.client.R;
import java.util.Date;
import android.graphics.Typeface;
import android.text.TextUtils;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import com.nostra13.universalimageloader.core.ImageLoader;
/**
* View holder for list item which holds references
* to the views so its like uber quick
* @author Robin
*/
public class DraftPostHolder implements ViewHolder
{
@InjectView(R.id.title) public TextView title;
@InjectView(R.id.sub_title) public TextView subTitle;
@InjectView(R.id.time) public TextView time;
@InjectView(R.id.text) public LinkifiedTextView text;
@InjectView(R.id.avatar) public AvatarView avatar;
@InjectView(R.id.options_container) public View optionsContainer;
@InjectView(R.id.media_image) public ImageView media;
@InjectView(R.id.send) public ImageView sendButton;
@InjectView(R.id.edit) public ImageView editButton;
@InjectView(R.id.duplicate) public ImageView duplicateButton;
@InjectView(R.id.delete) public ImageView deleteButton;
public DraftPostHolder(View convertView)
{
Views.inject(this, convertView);
}
@Override public void onViewDestroyed(View v)
{
avatar.setImageBitmap(null);
ImageLoader.getInstance().cancelDisplayTask(avatar);
media.setImageBitmap(null);
ImageLoader.getInstance().cancelDisplayTask(media);
}
/**
* Method to use when populating a view's members with the
* data from post.
* @param holder The holder containing the views
* @param post The post object
*/
public void populate(DraftPost post, DraftAdapter adapter)
{
((View)media.getParent()).setVisibility(View.GONE);
User poster = User.loadUser(post.getSelectedAccountId());
String postText = post.getPostText();
if (post.getEntities().get(Type.LINK) != null && postText.length() > 0)
{
int count = post.getEntities().get(Type.LINK).size();
for (int index = count - 1; index > -1; index--)
{
LinkEntity entity = (LinkEntity)post.getEntities().get(Type.LINK).get(index);
String start = postText.substring(0, entity.getPos());
String linkText = postText.substring(entity.getPos(), entity.getPos() + entity.getLen());
String end = "";
if (entity.getPos() + entity.getLen() < postText.length())
{
end = postText.substring(entity.getPos() + entity.getLen(), postText.length());
}
postText = start + "<md href=\"" + entity.getUrl() + "\" data-anchor=\"" + linkText + "\">" + linkText + "</md>" + end;
}
}
title.setText(poster.getFormattedMentionName()[0]);
subTitle.setText(poster.getFormattedMentionName()[1]);
text.setText(postText);
text.setLinkMovementMethod(null);
time.setText(SettingsManager.getDateFormat().format(new Date(post.getDate())));
if (SettingsManager.isCustomFontsEnabled())
{
title.setTypeface(Typeface.defaultFromStyle(0));
subTitle.setTypeface(Typeface.defaultFromStyle(0));
text.setTypeface(Typeface.defaultFromStyle(0));
}
if (SettingsManager.getShowAvatars())
{
avatar.setVisibility(View.VISIBLE);
avatar.setContentDescription(poster.getFormattedMentionName()[0]);
avatar.setImageBitmap(null);
ImageLoader.getInstance().cancelDisplayTask(avatar);
if (poster.isAvatarDefault())
{
avatar.setImageResource(R.drawable.default_avatar);
}
else
{
ImageLoader.getInstance().displayImage(poster.getAvatarUrl() + "?avatar=1&id=" + poster.getId(), avatar, MainApplication.getAvatarImageOptions());
}
}
else
{
avatar.setContentDescription("");
avatar.setVisibility(View.GONE);
}
boolean block = SettingsManager.isInlineImagesEnabled();
block = block && (!SettingsManager.isInlineImageWifiEnabled() || (SettingsManager.isInlineImageWifiEnabled() && MainApplication.isOnWifi()));
block = block && !TextUtils.isEmpty(post.getImagePath());
if (block)
{
String imageToLoad = post.getImagePath();
ImageLoader.getInstance().displayImage(imageToLoad, media, MainApplication.getMediaImageOptions());
((View)media.getParent()).setVisibility(View.VISIBLE);
}
}
}